Адміністрація вирішила продати даний сайт. За детальною інформацією звертайтесь за адресою: rozrahu@gmail.com

ДОСЛІДЖЕННЯ ШВИДКОДІЇ ВИКОНАННЯ МУЛЬТИПЛІКАТИВНИХ ОПЕРАЦІЙ З ДОВГИМИ ЧИСЛАМИ

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних технологій, автоматики та метрології
Факультет:
Інформаційна безпека
Кафедра:
Кафедра захисту інформації

Інформація про роботу

Рік:
2009
Тип роботи:
Лабораторна робота
Предмет:
Алгоритмічні основи криптології
Група:
ІБ-44
Варіант:
3

Частина тексту файла

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»  ДОСЛІДЖЕННЯ ШВИДКОДІЇ ВИКОНАННЯ МУЛЬТИПЛІКАТИВНИХ ОПЕРАЦІЙ З ДОВГИМИ ЧИСЛАМИ Лабораторна робота № 2 Варіант № 3 Виконала: студентка групи ІБ-44 Перевірив: Львів – 2010 Мета роботи: вивчити алгоритми множення та ділення довгих чисел та навчитися розробляти програмне забезпечення для реалізації цих алгоритмів на комп’ютері. Завдання: 1. Вивчити основні алгоритми множення та ділення довгих чисел, а також способи підвищення швидкодії виконання мультиплікативних операцій з довгими числами. 2. Скласти блок-схеми алгоритмів та програми для реалізації операцій множення (стовпчиком, швидке множення, множення з використанням перетворення Фур’є) або ділення довгих чисел. 3. Дослідити швидкість виконання мультиплікативних операцій для розрядності довгих чисел від 50 до 200. Накреслити графіки відповідних залежностей і порівняти одержані результати. № п/п Варіант представлення числа Заповнення невикористаних розрядів Операції з довгими числами  3. 3 використати лічильник множення довгих чисел з використанням перетворення Фур’є   Список ідентифікаторів констант, змінних і функцій, використаних у головній програмі і підпрограмах та їх пояснення MaxDig – константа що вказує на максимальну довжину масиву; оsn – константа що вказує на основу; Input()- ввід довгого числа з клавіатури; Output()- вивід довгого числа на екран; fft() – знаходження ШПФ від числа; bfft()-знаходження ДПФ від числа; transf()-здійснює відповідні перенесення; scal_mult()-здійснює скалярне множення двох векторів; mult_fft()-множення двох довгих чисел; ch – елемент типу CHAR; masCh – масив елементів типу CHAR; a[] – масив, що представляє довге число; b[]– масив, що представляє довге число; c[]– масив, що представляє довге число; y[][]-двовимірний масив, що представляє довге число; y1[][]-двовимірний масив, що представляє довге число; y2[][]-двовимірний масив, що представляє довге число; i, j, k – цілі змінні, що використовуються в циклі; malloc()-функція, яка надає змінній динамічну пам’ять; N, NN, p, k, tt-змінні, що використовуються у підпрограмах. Програма #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <conio.h> #include <math.h> #define MaxDig 100 #define osn 10000 #define Pi 3.141592653589793 void input(long a[MaxDig]); void output(long a[MaxDig]); void fft(long a[MaxDig], double y[MaxDig][2], int N); void mult_fft(long a[MaxDig], long b[MaxDig], long c[MaxDig]); void scal_mult(double y1[MaxDig][2], double y2[MaxDig][2], double y[MaxDig][2]); void transf(long c[MaxDig]); long round(double x); void bfft(double y[MaxDig][2], long c[MaxDig], int N); long int*Input( char masCh[]) { long int *a; char ch; a = (long int*)malloc(MaxDig*sizeof(int)); int i = 0; int j = 0; for(i = 0; i < MaxDig; i++) { a[i] = 0; } for(j = 0; masCh[j] != NULL; j++) { if ( isdigit(masCh[j]) ) { for (i = a[0]; i >= 1; i--) { a[i + 1] = a[i + 1] + (a[i] * 10) / osn; a[i] = a[i] * 10 % osn; } ch = masCh[j]; int a22 = atoi(&ch); a[1] = a[i+1] + a22; if (a[a[0] + 1] > 0) a[0]++; } } return a; } void Output(long int *b) { int N = 0; int NN = 1; int p; int b_Osn = b[0]; int i = 0; for(i = b[0]; i>=1 ; i--) { N = b[i]; if (N == 0) NN = 0; for (p = 1; N > 0; p = p*10) { N = N / 10; } while (osn - p != 0) { if (b[0] == i) break; printf("%c",'0'); p = p*10; } if (NN == 1) { int result = b[i]; printf("%d",result); } NN = 1; N = 0; } } void fft(long a[MaxDig], double y[MaxDig][2], int N) { int i,j,k; for(i=0;i<MaxDig;i++) for(j=0;j<2;j++) y[i][j]=0; for(j=0;j<N;j++) { for(i=0;i<a[0];i++) { y[j][0]=y[j][0]+a[a[0]-i]*cos(2*Pi*i*j/N); y[j][1]=y[j][1]+a[a[0]-i]*sin(2*Pi*i*j/N); } } } lon...
Антиботан аватар за замовчуванням

01.01.1970 03:01

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини